home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-10-01 | 110.5 KB | 2,973 lines |
-
-
-
-
-
-
- Network Working Group Mark Crispin
- Internet Draft: IMAP2bis University of Washington
- Obsoletes: RFC 1176, 1064 October 1993
- Document: internet-drafts/draft-ietf-imap-imap2bis-01.txt
-
-
- INTERACTIVE MAIL ACCESS PROTOCOL - VERSION 2bis
-
-
- Status of this Memo
-
- This document is an Internet Draft. Internet Drafts are working
- documents of the Internet Engineering Task Force (IETF), its Areas,
- and its Working Groups. Note that other groups may also distribute
- working documents as Internet Drafts.
-
- Internet Drafts are draft documents valid for a maximum of six
- months. Internet Drafts may be updated, replaced, or obsoleted by
- other documents at any time. It is not appropriate to use Internet
- Drafts as reference material or to cite them other than as a "working
- draft" or "work in progress". Please check the I-D abstract listing
- contained in each Internet Draft directory to learn the current
- status of any this or any other Internet Draft.
-
- This is a draft document of the IETF IMAP Working Group. It is a
- draft specification of the IMAP2bis protocol, based upon the
- following earlier specifications: unpublished IMAP2bis.TXT document,
- RFC 1176, and RFC 1064. This document is not a complete or final
- specification of the IMAP2bis protocol.
-
- Only matters that are believed to be uncontroversial, or issues that
- are believed to be resolved, appear in this document. The entirety
- of this document is subject to change and extension. A list of open
- issues may be found in the file mail/imap.unresolved on Internet site
- ftp.CAC.Washington.EDU.
-
- A version of this draft document will be submitted to the RFC editor
- as a Proposed Standard for the Internet Community. Discussion and
- suggestions for improvement are requested. This document will expire
- before 31 March 1994. Distribution of this draft is unlimited.
- Comments are solicited and should be sent to imap@CAC.Washington.EDU.
-
-
- Introduction
-
- The Interactive Mail Access Protocol, Version 2bis (IMAP2bis) allows
- a client to access and manipulate electronic mail on a server.
- IMAP2bis is designed to permit manipulations of remote mailboxes as
-
-
-
- Crispin [Page 1]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- if they were local. IMAP2bis includes operations for creating,
- deleting, and renaming mailbox folders; checking for new mail;
- permanently removing messages; setting and clearing flags; RFC 822
- and MIME parsing; searching; and selective fetching of message
- attributes, texts, and portions thereof.
-
- IMAP2bis does not specify a means of posting mail; this function is
- handled by a mail transfer protocol such as SMTP (RFC 821).
-
- IMAP2bis assumes a reliable data stream such as provided by TCP.
- When TCP is used, an IMAP2bis server listens on port 143.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Crispin [Page 2]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- System Model and Philosophy
-
- There are three fundamental models of client/server email: offline,
- online, and disconnected use. IMAP2bis can be used in any one of
- these three models.
-
- The offline model is the most familiar form of client/server email
- today, and is used by protocols such as POP-3 (RFC 1225) and UUCP.
- In this model, a client application periodically connects to a
- server. It downloads all the pending messages to the client machine
- and deletes these from the server. Thereafter, all mail processing
- is local to the client. This model is store-and-forward; it moves
- mail on demand from an intermediate server (maildrop) to a single
- destination machine.
-
- The online model is most commonly used with remote filesystem
- protocols such as NFS. In this model, a client application
- manipulates mailbox data on a server machine. A connection to the
- server is maintained throughout the session. No mailbox data are
- kept on the client; the client retrieves data from the server as is
- needed. IMAP2bis introduces a form of the online model that requires
- considerably less network bandwidth than a remote filesystem
- protocol, and provides the opportunity for using the server for CPU
- or I/O intensive functions such as parsing and searching.
-
- The disconnected use model is a hybrid of the offline and online
- models, and is used by protocols such as PCMAIL (RFC 1056). In this
- model, a client user downloads some set of messages from the server,
- manipulates them offline, then at some later time uploads the
- changes. The server remains the authoritative repository of the
- messages. The problems of synchronization (particularly when
- multiple clients are involved) are handled through the means of
- unique identifiers for each message.
-
- Each of these models have their own strengths and weaknesses:
-
- Feature Offline Online Disc
- ------- ------- ------ ----
- Can use multiple clients NO YES YES
- Minimum use of server connect time YES NO YES
- Minimum use of server resources YES NO NO
- Minimum use of client disk resources NO YES NO
- Multiple remote mailboxes NO YES YES
- Fast startup NO YES NO
- Mail processing when not online YES NO YES
-
- Although IMAP2bis was originally designed to accommodate the online
- model, it can support the other two models as well. This makes
-
-
-
- Crispin [Page 3]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- possible the creation of clients that can be used in any of the three
- models. For example, a user may wish to switch between the online
- and disconnected models on a regular basis (e.g. owing to travel).
-
- IMAP2bis is designed to transmit message data on demand, and to
- provide the facilities necessary for a client to decide what data it
- needs at any particular time. There is generally no need to do a
- wholesale transfer of an entire mailbox or even of the complete text
- of a message. This makes a difference in situations where the
- mailbox is large, or when the link to the server is slow.
-
- More specifically, IMAP2bis supports server-based RFC 822 and MIME
- processing. With this information, it is possible for a client to
- determine in advance whether it wishes to retrieve a particular
- message or part of a message. For example, a user connected to an
- IMAP2bis server via a dialup link can determine that a message has a
- 2000 byte text segment and a 40 megabyte video segment, and elect to
- fetch only the text segment.
-
- In IMAP2bis, the client/server relationship lasts only for the
- duration of the TCP connection, and mailbox state is maintained on
- the server. There is no registration of clients. Except for any
- unique identifiers used in disconnected use operation, the client
- initially has no knowledge of mailbox state and learns it from the
- IMAP2bis server when a mailbox is selected. This initial transfer is
- minimal; the client requests additional state data as it needs.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Crispin [Page 4]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- The Protocol
-
- The IMAP2bis protocol consists of a sequence of client commands and
- server responses, with server data interspersed between the
- responses. Unlike most Internet protocols, commands and responses
- are tagged. That is, a command begins with a unique identifier
- (typically a short alphanumeric sequence such as a Lisp "gensym"
- function would generate e.g., A0001, A0002, etc.) called a tag. The
- response to the command is given the same tag from the server.
-
- Additionally, the server may send an arbitrary amount of "unsolicited
- data". Unsolicited data is identified by the special reserved tag of
- "*". The unsolicited data mechanism transmits most data in IMAP2bis.
- The term "unsolicited data" suggests that the data may have been
- transmitted without any explicit request by the client for that data.
- No distinction is made in IMAP2bis between data transmitted as a
- result of a client command and data that are unilaterally transmitted
- by the server. One form of unilaterally transmitted data that
- commonly occurs is an alert of a change to the mailbox made by some
- process other than the IMAP2bis client or server; for example,
- changes in the size of the mailbox (new mail) or in the status of
- individual messages.
-
- There is another special reserved tag, "+", discussed below.
-
- The server must be listening for a connection. When a connection is
- opened the server sends a greeting message and then waits for
- commands. This greeting is either a PREAUTH (meaning that the user
- has already been identified and authenticated by an external
- mechanism such as rsh) or OK (meaning that the user is not yet
- authenticated) unsolicited response. The server may also send a BYE
- unsolicited response and close the connection if it rejects the
- connection.
-
- The client opens a connection and waits for the greeting. The client
- must not send any commands until it has received the greeting from
- the server.
-
- Once the greeting has been received, the client may begin sending
- commands. It is not under any obligation to wait for a server
- response to a command before sending another command, subject to the
- constraints of underlying flow control. When commands are received
- the server acts on them and responds with command responses, often
- interspersed with data.
-
- In general, the command responses do not themselves contain the
- requested data. Instead, they indicate the completion status of the
- request. There are three fundamental responses: success (OK), error
-
-
-
- Crispin [Page 5]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- (NO), request faulty or not understood (BAD). The effect of a
- command can not be considered complete until a command response with
- a tag matching the command is received from the server.
-
- It is not required that a server process a command to completion
- before beginning processing of the next command, except when the
- processing of the previous command may affect the results of the next
- command by changing the state of the current mailbox. This has
- certain other effects; for example, this implies that an EXPUNGE
- response can not be transmitted as part of a response to a command
- that uses sequence numbers, because EXPUNGE results in message
- numbers being changed.
-
- Client implementations should update their local cache of data with
- any received unsolicited data, regardless of whether or not the
- client expected that data. Unlike command completion responses, data
- are not necessarily associated with a specific command. The tagged
- command completion response signals that the client cache is now
- updated with the results of the corresponding command.
-
- If authentication has not yet been completed, it must now be done via
- the LOGIN command before any access to data is permitted. The only
- permitted commands before successful authentication are LOGIN, NOOP,
- and LOGOUT. See the section below on authentication.
-
- Once authenticated, the client must send a mailbox selection command
- to access the desired mailbox; no mailbox is selected by default.
- Mailbox names are implementation dependent. However, the word
- "INBOX" must be implemented to mean the primary or default mailbox
- for this user, independent of any other server semantics. It is
- permitted for a server not to have an INBOX if there is no concept of
- a primary or default mailbox for this user. The name "INBOX" MUST
- NOT be used for any other purpose.
-
- On a successful selection, the server will send a list of valid
- flags, number of messages, and number of messages arrived since last
- access for this mailbox as unsolicited data, followed by an OK
- response. The client may close access to this mailbox and access a
- different one with another selection command.
-
- Several flags are predefined in IMAP2bis. All IMAP2bis flags begin
- with a backslash ("\") character. Servers MUST, at a minimum,
- support all the predefined flags in this specification. In addition,
- a server may also have some implementation-defined per-mailbox flags
- (called, for historical reasons, "keywords") that do not begin with
- backslash. Clients should use the information from the server's
- FLAGS response at message selection to determine what flags the
- server supports.
-
-
-
- Crispin [Page 6]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- The client requests mailbox data with FETCH commands, and receives it
- via the unsolicited data mechanism. Three major categories of
- mailbox data exist.
-
- The first category is data that are associated with a message as an
- entity in the mailbox. There are now four such items of data: the
- "internal date", the "RFC 822 size", the "flags", and the "unique
- id". The internal date is the date and time that the message was
- placed in the mailbox. The RFC 822 size is the size in octets of the
- message, expressed as an RFC 822 text string. The flags are a list
- of status flags associated with the message. The unique id is an
- identifier that is guaranteed to refer to this message and to none
- other in the mailbox and that, unlike IMAP2bis sequence numbers,
- persists across sessions.
-
- The second category is data that describe the composition and
- delivery information of a message; that is, information such as the
- message sender, recipient lists, message-ID, subject, MIME structure,
- etc. This is the information that is stored in the RFC 822 and MIME
- headers. In IMAP2bis, the RFC 822 header information that may be
- fetched is called the "envelope" (not to be confused with SMTP
- envelopes). Similarly, the MIME header information that may be
- fetched is called the "body". A client can use the parsed envelope
- and body and not worry about having to do its own RFC 822 or MIME
- parsing.
-
- The third category is textual data, some of which are intended for
- direct human viewing. IMAP2bis defines six such items:
- RFC822.HEADER, RFC822.HEADER.LINES, RFC822.HEADER.LINES.NOT,
- RFC822.TEXT, RFC822, and MIME body parts. It is possible to fetch an
- individual MIME body part of a message without fetching any other
- data associated with the message.
-
- A simple client can "FETCH RFC822" to get the entire message without
- any processing. A more advanced client might fetch some combination
- of the first and second categories of data for use as a presentation
- menu. Then, when the user wishes to read a particular message, it
- will fetch the appropriate texts.
-
- Data structures in IMAP2bis are represented as an S-expression list
- similar to that used in the Lisp programming language. An S-
- expression consists of a sequence of data items delimited by space
- and bounded at each end by parentheses. An S-expression may itself
- contain other S-expressions, using parentheses to indicate nesting.
- S-expression syntax was chosen because it provides a concise and
- precise means of expressing nested data (e.g. MIME structures).
-
- The client can alter certain data with a STORE command. As an
-
-
-
- Crispin [Page 7]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- example, a message is deleted from a mailbox by setting the \DELETED
- flag with a STORE command.
-
- Other client operations that can be done to a mailbox include copying
- messages to other mailboxes, permanently removing deleted messages,
- checking for updated mailbox state, and searching for messages that
- match certain criteria. It is also possible to select a different
- mailbox, create a new mailbox, rename an existing mailbox, or delete
- an existing mailbox.
-
- The client should end the session with the LOGOUT command. The
- server returns a "BYE" followed by an "OK", at which point both the
- client and the server close the connection. If the client closes the
- network connection without a LOGOUT command, the server should do its
- normal logout procedures without attempting any further interaction
- with the client.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Crispin [Page 8]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- Authentication
-
- Pre-authentication is only possible when the connection to the
- IMAP2bis service is made through some link protocol that provides its
- own authentication mechanism. It is not used with a TCP connection
- to port 143.
-
- An example of pre-authentication is the BSD "RSH" protocol, that
- provides authentication through a "trusted host" facility. Another
- example would be a manual invocation of an IMAP2bis server from a
- logged-in timesharing job.
-
- A pre-authenticated IMAP2bis server should recognize that
- authentication has already happened, and enter the post-login state.
- In its greeting message, it should use the unsolicited response
- "PREAUTH" instead of "OK" to indicate that external authentication
- has taken place.
-
- This is an example of a pre-authentication scenario. In this and all
- other examples in this document, S: indicates server dialog and C:
- indicates client dialog.
-
- S: * PREAUTH IMAP2bis Server pre-authenticated as user "Smith"
- C: A001 SELECT INBOX
- S: * FLAGS (\Answered \Flagged \Deleted \Seen)
- S: * 19 EXISTS
- S: * 2 RECENT
- S: A001 OK SELECT complete
-
- A connection that is not pre-authenticated is constrained to using
- the LOGIN command for establishing authentication. Authentication
- via the LOGIN command is with either a user name and password pair,
- or with an user identifier and Kerberos authenticator. See the
- description of the LOGIN command for more details.
-
- Servers may allow non-authenticated access to certain mailboxes or
- bulletin boards. The convention is to use a LOGIN command with the
- userid "anonymous". A password is still required. It is
- implementation-dependent what requirements, if any, are placed on the
- password and what access restrictions are placed on anonymous users.
-
- Implementations are NOT required to support pre-authentication,
- Kerberos authentication, or the anonymous convention.
-
-
-
-
-
-
-
-
- Crispin [Page 9]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- Definitions of Commands and Responses
-
- Summary of Defined Commands and Responses
-
- Commands || Responses
- -------- || -------
- tag NOOP || tag OK response_text
- tag LOGIN user password || tag NO response_text
- tag LOGOUT || tag BAD response_text
- tag CREATE mailbox || * PREAUTH response_text
- tag DELETE mailbox || * OK response_text
- tag RENAME old_mailbox new_mailbox || * NO response_text
- tag FIND MAILBOXES pattern || * BAD response_text
- tag FIND ALL.MAILBOXES pattern || * BYE response_text
- tag FIND BBOARDS pattern || * MAILBOX mstring
- tag FIND ALL.BBOARDS pattern || * BBOARD mstring
- tag SUBSCRIBE MAILBOX mailbox || * SEARCH 1#number
- tag UNSUBSCRIBE MAILBOX mailbox || * FLAGS flag_list
- tag SUBSCRIBE BBOARD mailbox || * number EXISTS
- tag UNSUBSCRIBE BBOARD mailbox || * number RECENT
- tag SELECT mailbox || * number EXPUNGE
- tag EXAMINE mailbox || * number FETCH data
- tag BBOARD mailbox || * number COPY
- tag CHECK || * number STORE data
- tag EXPUNGE || + text
- tag COPY sequence mailbox ||
- tag APPEND mailbox 0#flag literal ||
- tag FETCH sequence data ||
- tag PARTIAL msgno data start count ||
- tag STORE sequence data value ||
- tag UID AFTER uniqueid ||
- tag UID COPY sequence mailbox ||
- tag UID FETCH sequence data ||
- tag UID STORE sequence data value ||
- tag SEARCH search_program ||
- tag x_command arguments ||
-
- Note: there is no pairing between commands and responses on the same
- line. Any command may result in any number (including none at all)
- of any of responses beginning with "*" (referred to as "unsolicited
- data"), followed by one tagged response.
-
-
-
-
-
-
-
-
-
-
- Crispin [Page 10]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- Commands
-
- If, during the execution of any command, the server observes that the
- mailbox size has changed, the server should output an unsolicited
- EXISTS and RECENT response reflecting the changed size to alert the
- client. Similarly, any observed change in message status should
- cause an unsolicited FETCH response with the new flag data.
-
-
- tag NOOP
-
- The NOOP command returns an OK to the client. By itself, it does
- nothing else. However, since any command can return a status
- update as unsolicited data, this command can be used to poll for
- new mail or for message status updates.
-
- Another possible use of this command is for the client to "ping"
- the server so that the client and server know that each other are
- still alive. This is useful with servers that have an inactivity
- autologout timer.
-
-
- tag LOGIN user password
-
- The LOGIN command identifies the user to the server and carries
- the password authenticating this user. This information is used
- by the server to control access to the mailboxes.
-
- EXAMPLE: a001 LOGIN SMITH SESAME
- logs in as user SMITH with password SESAME.
-
- If a server supports authentication via Kerberos, it may accept
- the string "@KERBEROS:" followed by the hexadecimal representation
- of a Kerberos authenticator.
-
- EXAMPLE: The following is a Kerberos login scenario (note that the
- line breaks in the sample authenticator are for editorial clarity
- and are not in a real authenticator):
-
- S: * OK Kerberos IMAP2bis Server
- C: a001 LOGIN smith @KERBEROS:040700414e445245572e434d552e4544550
- 038202c868f3890b377fc8266acc1bedb96b80d3fa76489898e74cd1c952dc
- 4003ea3428f29f1c470016cf5adc22f939e6deff2747254c1815d5b0b90d4c
- 5a2cba21eb0abe32f9acbf568d751bf4cc13f5ba4e6d82c638a8b5421
- S: a001 OK [df84a4cb8323454f] Login OK via Kerberos
-
- The token in the brackets in the OK response is the Kerberos
- authentication response, encrypted with the session key in network
-
-
-
- Crispin [Page 11]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- byte order and an incremented checksum as in the usual Kerberos
- procedure.
-
-
- tag LOGOUT
-
- The LOGOUT command informs the server that the client is done with
- the session. The server should send an unsolicited BYE response
- before the (tagged) OK response, and then close the network
- connection.
-
-
- Mailbox manipulation commands: CREATE, DELETE, RENAME
-
- These commands permit the manipulation of entire mailboxes.
-
- tag CREATE mailbox
-
- The CREATE command creates a mailbox with the given name. This
- command returns an OK response only if a new mailbox with that
- name has been created. It is an error to attempt to create a
- mailbox with a name that refers to an extant mailbox. Any
- error in creation will return a NO response.
-
- Creating INBOX is not permitted. If there is a primary or
- default mailbox for this user, it MUST exist and be called
- INBOX.
-
-
- tag DELETE mailbox
-
- The DELETE command deletes a mailbox with the given name. This
- command returns an OK response only if a mailbox with that name
- has been deleted. It is an error to attempt to delete a
- mailbox name that does not exist. Any error in deletion will
- return a NO response.
-
- A server SHOULD NOT attempt to test that a mailbox is empty
- before permitting deletion; this would prevent the deletion of
- a mailbox that for some reason can not be opened or expunged,
- leaving to possible denial of service problems. Any such
- checking should be left to the discretion of the client.
-
- Deleting INBOX is not permitted.
-
-
-
-
-
-
-
- Crispin [Page 12]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- tag RENAME old_mailbox new_mailbox
-
- The RENAME command changes the name of a mailbox. This command
- returns an OK response only if a mailbox with the old name
- exists and has been successfully renamed to the new name. It
- is an error to attempt to rename with an old mailbox name that
- does not exist or a new mailbox name that already exists. Any
- error in renaming will return a NO response.
-
- Renaming INBOX is permitted. A new, empty INBOX is created in
- its place.
-
-
- FIND commands
-
- The FIND commands return some set of unsolicited MAILBOX or BBOARD
- replies, depending on the type of FIND, that have as their value a
- single mailbox name.
-
- Three wildcard characters are defined in the pattern argument. "*"
- specifies any number (including zero) characters may match at this
- position. "%" and "?" specify a single character may match at this
- position. For example, FOO*BAR will match FOOBAR, FOOD.ON.THE.BAR
- and FOO.BAR, whereas FOO%BAR and FOO?BAR match only FOO.BAR. "*"
- will match all mailboxes.
-
-
- tag FIND MAILBOXES pattern
-
- The FIND MAILBOXES command accepts as an argument a pattern
- (including wildcards) that specifies some set of mailbox names
- that the user has declared as being "active" or "subscribed".
- The exact meaning of this is implementation-dependent, since
- the concept of a set of "active" or "subscribed" mailboxes that
- is preserved across sessions may not be meaningful for a
- particular server or server implementation. If the SUBSCRIBE
- MAILBOX and UNSUBSCRIBE MAILBOX commands are implemented then
- this command returns the list manipulated by those commands.
-
- EXAMPLE: C: A002 FIND MAILBOXES *
- S: * MAILBOX FOOBAR
- S: * MAILBOX GENERAL
- S: A002 OK FIND completed
-
-
- tag FIND ALL.MAILBOXES pattern
-
- The FIND ALL.MAILBOXES command is similar to FIND MAILBOXES;
-
-
-
- Crispin [Page 13]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- however, it should return a complete list of all mailboxes
- available to the user. Data are returned as in FIND MAILBOXES.
-
- The special name INBOX is included in the output from FIND
- ALL.MAILBOXES unless INBOX is not supported by this server or
- for this user. The criteria for omitting INBOX is whether
- SELECT INBOX will return failure; it is not relevant whether
- the user's real INBOX resides on this or some other server.
- FIND MAILBOXES and SUBSCRIBE MAILBOX provide a mechanism for
- the user to identify that this is his or her real INBOX.
-
- FIND ALL.MAILBOXES must, at least, return all the mailbox names
- that are returned by FIND MAILBOXES.
-
- The exact meaning of this is implementation-dependent, since
- the concept of a bounded or deterministic set of "mailboxes
- available to the user" may not be meaningful for a particular
- server or server implementation.
-
-
- tag FIND BBOARDS pattern
-
- The FIND BBOARDS command accepts as an argument a pattern that
- specifies some set of bulletin board names that the user has
- declared as being "active" or "subscribed". Wildcards are
- permitted as in FIND MAILBOXES.
-
- The FIND BBOARDS command will return some set of unsolicited
- BBOARD replies that have as their value a single bulletin board
- name.
-
- EXAMPLE: C: A002 FIND BBOARDS *
- S: * BBOARD FOOBAR
- S: * BBOARD GENERAL
- S: A002 OK FIND completed
-
- The exact meaning of this is implementation-dependent, since
- the concept of a set of "active" or "subscribed" bboards that
- is preserved across sessions may not be meaningful for a
- particular server or server implementation. If the SUBSCRIBE
- BBOARD and UNSUBSCRIBE BBOARD commands are implemented then
- this command returns the list manipulated by those commands.
-
-
- tag FIND ALL.BBOARDS pattern
-
- The FIND ALL.BBOARDS command is similar to FIND BBOARDS;
- however, it should return a complete list of all bulletin
-
-
-
- Crispin [Page 14]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- boards available to the user. Data are returned as in FIND
- BBOARDS.
-
- FIND ALL.BBOARDS must, at least, return all the bboard names
- that are returned by FIND BBOARDS.
-
- The exact meaning of this is implementation-dependent, since
- the concept of a bounded or deterministic set of "bboards
- available to the user" may not be meaningful for a particular
- server or server implementation.
-
-
- Subscription commands
-
- These commands permit the manipulation of mailbox or bulletin board
- subscriptions. Subscription status should be preserved between
- sessions.
-
-
- tag SUBSCRIBE MAILBOX mailbox
-
- The SUBSCRIBE MAILBOX command adds the specified mailbox name
- to the list of "active" or "subscribed" mailboxes as returned
- by the FIND MAILBOXES command. This command returns an OK
- response only if the subscription is successful.
-
-
- tag UNSUBSCRIBE MAILBOX mailbox
-
- The UNSUBSCRIBE MAILBOX command removes the specified mailbox
- name from the list of "active" or "subscribed" mailboxes as
- returned by the FIND MAILBOXES command. This command returns
- an OK response only if the unsubscription is successful.
-
-
- tag SUBSCRIBE BBOARD bboard
-
- The SUBSCRIBE BBOARD command adds the specified mailbox name to
- the list of "active" or "subscribed" bulletin boards as
- returned by the FIND BBOARDS command. This command returns an
- OK response only if the subscription is successful.
-
-
- tag UNSUBSCRIBE BBOARD bboard
-
- The UNSUBSCRIBE BBOARD command removes the specified mailbox
- name from the list of "active" or "subscribed" bulletin boards
- as returned by the FIND BBOARDS command. This command returns
-
-
-
- Crispin [Page 15]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- an OK response only if the unsubscription is successful.
-
-
- tag SELECT mailbox
-
- This command selects a particular mailbox. The server must check
- that the user is permitted read access to this mailbox. Before
- returning an OK to the client, the server must send the following
- unsolicited data to the client:
- FLAGS mailbox's defined flags
- <n> EXISTS the number of messages in the mailbox
- <n> RECENT the number of messages added to the mailbox since the
- previous time this mailbox was read
- to define the initial state of the mailbox at the client. If it
- can not be determined which messages were added since the previous
- time a mailbox was read, then all messages SHOULD be considered
- recent. An example of this is if no "last read" time information
- is available or a read-only mailbox that does not permit a change
- of "last read" time.
-
- Multiple selection commands are permitted in a session. The
- previous mailbox is automatically deselected when a new selection
- is made. If concurrent access to multiple mailboxes is desired,
- the client should open additional sessions as needed.
-
- The mailbox name INBOX is a special name reserved to mean "the
- primary mailbox for this user on this server". The format of
- other mailbox names is implementation dependent.
-
- The text of an OK response to the SELECT command should begin with
- either "[READ-ONLY]" or "[READ-WRITE]" to show the mailbox's
- access status.
-
-
- tag EXAMINE mailbox
-
- The EXAMINE command is similar to SELECT, and returns the same
- output; however, the selected mailbox is identified as read-only
- and no changes are permitted to this mailbox. EXAMINE has the
- same mailbox namespace as SELECT.
-
-
- tag BBOARD mailbox
-
- The BBOARD command is similar to SELECT, and returns the same
- output. Its argument is a shared mailbox (bulletin board) name
- instead of an ordinary mailbox. There is no requirement that the
- namespace for BBOARD be the same as that for SELECT and EXAMINE.
-
-
-
- Crispin [Page 16]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- BBOARD also differs from EXAMINE in that it may allow changes
- (e.g. marking a message as seen or deleted) to a mailbox; the
- exact handling of this is implementation dependent.
-
-
- tag CHECK
-
- The CHECK command requests a checkpoint of the mailbox. CHECK may
- cause an operation that may take a non-instantaneous amount of
- real-time to complete. The exact meaning of a checkpoint is
- implementation-dependent. Possible interpretations include
- forcing an update of the server's disk of all changes made to the
- selected mailbox, rescanning of the entire mailbox, etc. If an
- implementation has no such considerations, CHECK should be
- equivalent to NOOP.
-
- CHECK should NOT be used to poll for new mail; new mail checking
- happens implicitly as part of every command. NOOP should be used
- for any new mail polling. CHECK should NOT be used to get the
- current size of the mailbox; there is no guarantee that CHECK will
- cause an EXISTS or RECENT unsolicited response.
-
-
- tag EXPUNGE
-
- The EXPUNGE command permanently removes all messages with the
- \DELETED flag set from the currently selected mailbox. Before
- returning an OK to the client, for each message that is removed,
- an unsolicited EXPUNGE response is sent. The message number for
- each successive message in the mailbox is immediately decremented
- by 1; this means that if the last 5 messages in a 9-message mail
- file are expunged the client will receive 5 unsolicited EXPUNGE
- responses for message 5.
-
-
- tag COPY sequence mailbox
-
- The COPY command copies the specified message(s) to the specified
- destination mailbox. The flags of the message(s) SHOULD be
- preserved in the copy.
-
- If the destination mailbox does not exist, a server SHOULD return
- an error. It SHOULD NOT automatically create the mailbox. Unless
- it is certain that the destination mailbox can not be created, the
- server MUST send the special information token "[TRYCREATE]" as
- the prefix of the text of the tagged NO response. This gives a
- hint to the client that it can attempt a CREATE command and retry
- the COPY if the CREATE is successful.
-
-
-
- Crispin [Page 17]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- If the COPY command is unsuccessful for any reason, IMAP2bis
- compliant server implementations MUST restore the destination
- mailbox its prior state before the COPY attempt.
-
- EXAMPLE: A003 COPY 2:4 MEETING
- copies messages 2, 3, and 4 to mailbox "MEETING".
-
-
- tag APPEND mailbox 0#flag literal
-
- The APPEND command appends the literal argument as a new message
- in the specified destination mailbox. This argument is in the
- format of an RFC 822 message. If any flags are specified, those
- flags SHOULD be set in the resulting message. If the append is
- unsuccessful for any reason the mailbox must be restored to its
- prior state before the APPEND attempt; no partial appending is
- permitted. If the mailbox is currently selected, the normal new
- mail actions should occur.
-
- Server implementations SHOULD return a NO response if the length
- of the literal is zero.
-
- If the destination mailbox does not exist, a server MUST return an
- error, and MUST NOT automatically create the mailbox. Unless it
- is certain that the destination mailbox can not be created, the
- server MUST send the special information token "[TRYCREATE]" as
- the prefix of the text of the tagged NO response. This gives a
- hint to the client that it can attempt a CREATE command and retry
- the APPEND if the CREATE is successful.
-
- Note that this functionality is unsuitable for message delivery,
- because it does not provide a mechanism to transfer RFC 821 (SMTP)
- envelope information.
-
-
- tag FETCH sequence data
-
- The FETCH command retrieves data associated with a message in the
- mailbox. The data items to be fetched may be either a single atom
- or an S-expression list. The currently defined data items that
- can be fetched are:
-
- ALL Macro equivalent to:
- (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE)
-
- BODY Non-extensible form of BODYSTRUCTURE.
-
-
-
-
-
- Crispin [Page 18]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- BODY[section] The text of a particular body section. The
- section specification is a set of one or more
- part numbers delimited by periods.
-
- Single-part messages only have a part 1.
-
- Multipart messages are assigned consecutive
- part numbers, as they occur in the message.
- If a particular part is of type message or multipart,
- its parts must be indicated by a period followed by
- the part number within that nested multipart part.
- It is not permitted to fetch a multipart part
- itself, only its individual members.
-
- A part of type MESSAGE and subtype RFC822 also
- has nested parts. These are the parts of the
- MESSAGE part's body. Nested part 0 of a part of
- type MESSAGE and subtype RFC822 is the RFC 822
- header of the message.
-
- Every message has at least one part.
-
- EXAMPLE: Here is a complex message with its
- associated section specifications.
- 1 TEXT/PLAIN
- 2 APPLICATION/OCTET-STREAM
- 3 MESSAGE/RFC822
- 3.0 (RFC 822 header of the message)
- 3.1 TEXT/PLAIN
- 3.2 APPLICATION/OCTET-STREAM
- MULTIPART/MIXED
- 4.1 IMAGE/GIF
- 4.2 MESSAGE/RFC822
- 4.2.0 (RFC 822 header of the message)
- 4.2.1 TEXT/PLAIN
- MULTIPART/ALTERNATIVE
- 4.2.2.1 TEXT/PLAIN
- 4.2.2.2 TEXT/RICHTEXT
- Note that there is no section specification for
- the Multi-part parts (no section 4 or 4.2.2).
-
- The \SEEN flag is implicitly set; if this causes
- the flags to change they should be included as
- part of the fetch results.
-
- BODYSTRUCTURE The MIME body structure of the message. The
- body is computed by the server by parsing the
- MIME header lines.
-
-
-
- Crispin [Page 19]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- ENVELOPE The envelope of the message. The envelope is
- computed by the server by parsing the RFC 822
- header into the component parts, defaulting
- various fields as necessary.
-
- FAST Macro equivalent to:
- (FLAGS INTERNALDATE RFC822.SIZE)
-
- FLAGS The flags that are set for this message.
-
- FULL Macro equivalent to:
- (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODY)
-
- INTERNALDATE The date and time the message was written to
- the mailbox.
-
- RFC822 The message in RFC 822 format. The \SEEN
- flag is implicitly set; if this causes the
- flags to change they should be included as
- part of the fetch results. This is the
- concatenation of RFC822.HEADER and RFC822.TEXT.
-
- RFC822.HEADER The RFC 822 format header of the message as
- stored on the server including the delimiting
- blank line between the header and the body.
-
- RFC822.HEADER.LINES header_line_list
- All header lines (including continuation lines)
- of the RFC 822 format header of the message
- with a field-name (as defined in RFC 822) that
- matches any of the strings in header_line_list.
- The matching is case-independent but otherwise
- exact.
-
- RFC822.HEADER.LINES.NOT header_line_list
- All header lines (including continuation lines)
- of the RFC 822 format header of the message
- with a field-name (as defined in RFC 822) that
- does not match any of the strings in
- header_line_list. The matching is
- case-independent but otherwise exact.
-
- RFC822.SIZE The number of characters in the message as
- expressed in RFC 822 format.
-
- RFC822.TEXT The text body of the message, omitting the
- RFC 822 header. The \SEEN flag is implicitly
- set; if this causes the flags to change they
-
-
-
- Crispin [Page 20]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- should be included as part of the fetch results.
-
- UID The unique identifier for the message.
-
- EXAMPLES:
-
- A003 FETCH 2:4 ALL
- fetches the flags, internal date, RFC 822 size, and envelope
- for messages 2, 3, and 4.
-
- A004 FETCH 3 RFC822
- fetches the RFC 822 representation for message 3.
-
- A005 FETCH 4 (FLAGS RFC822.HEADER)
- fetches the flags and RFC 822 format header for message 4.
-
-
- tag PARTIAL msgno data start_octet octet_count
-
- The PARTIAL command is equivalent to the associated FETCH command,
- with the added functionality that only the specified number of
- octets, beginning at the specified starting octet, are returned.
- Note that only a single message can be fetched at a time. The
- first octet of a message, and hence the minimum for the starting
- octet, is octet 1.
-
- The following FETCH items are valid data for PARTIAL: RFC822,
- RFC822.HEADER, RFC822.TEXT, and BODY[section].
-
- Any partial fetch that attempts to read beyond the end of the text
- is truncated as appropriate. If the starting octet is beyond the
- end of the text, an empty string is returned.
-
- The data are returned with the FETCH response. There is no
- indication of the range of the partial data in this response; thus
- it is generally not possible to implement caching with PARTIAL
- data. It is also not possible to stream multiple PARTIAL commands
- of the same data item without processing and synchronizing at each
- step, since each PARTIAL fetch of data replaces any prior
- (PARTIAL) FETCH of the data.
-
- Note that when partial fetching it is possible to break in the
- middle of a line or a critical sequence such as a BASE64 quadruple
- or QUOTED-PRINTABLE shift. Implementations using partial fetching
- should keep this in mind. There is no requirement that partial
- fetches follow any sequence; so if it turns out that a partial
- fetch of octets 1 through 10000 breaks in an awkward place, it is
- permitted to continue with a partial fetch of 9987 through 19987,
-
-
-
- Crispin [Page 21]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- etc.
-
- The handling of the \SEEN flag is the same as with the FETCH
- command.
-
-
- tag STORE sequence data value
-
- The STORE command alters data associated with a message in the
- mailbox. The currently defined data items that can be stored are:
-
- FLAGS Replace the flags for the message with the
- argument (in flag list format).
-
- +FLAGS Add the flags in the argument to the
- message's flag list.
-
- -FLAGS Remove the flags in the argument from the
- message's flag list.
-
- EXAMPLE: A003 STORE 2:4 +FLAGS (\DELETED)
- marks messages 2, 3, and 4 for deletion.
-
-
- UID commands
-
- These commands use unique identifiers instead of message numbers in
- their arguments to reference a particular message or range of
- messages. The unique identifier of a message is guaranteed not to
- refer to any other message in the mailbox. Unlike IMAP2bis sequence
- numbers, unique identifiers persist across sessions.
-
- Sequence ranges are permitted; note however that there is no
- guarantee that unique identifiers be contiguous. A non-existent
- unique identifier within a sequence range is ignored without any
- error message generated.
-
- Because of the potential for ambiguity, the UID command does not
- change responses. That is, the number after the "*" in an
- unsolicited FETCH response is a message number, not a unique
- identifier. However, servers MUST implicitly include UID as part of
- any FETCH response caused by a UID command, regardless of whether UID
- was specified.
-
-
-
-
-
-
-
-
- Crispin [Page 22]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- EXAMPLE: C: A003 UID FETCH 4827313:4828442 FLAGS
- S: * 23 FETCH (FLAGS (\SEEN) UID 4827313)
- S: * 24 FETCH (FLAGS (\SEEN) UID 4827943)
- S: * 25 FETCH (FLAGS (\SEEN) UID 4828442)
- S: A003 UID FETCH completed
-
-
- tag UID AFTER uniqueid
-
- The UID AFTER command determines what unique identifiers exist
- that are greater than the specified unique identifier. It
- returns unsolicited FETCH responses for each such message.
-
- For example, if the specified unique identifier refers to
- message 572 in a mailbox with 613 messages, the results
- returned are equivalent to doing "FETCH 573:613 UID".
-
-
- tag UID COPY sequence mailbox
-
- The UID COPY command is identical to the COPY command, with the
- exception that the numbers used in the sequence are unique
- identifiers instead of message numbers.
-
-
- tag UID FETCH sequence data
-
- The UID FETCH command is identical to the FETCH command, with
- the exception that the numbers used in the sequence are unique
- identifiers instead of message numbers.
-
-
- tag UID STORE sequence data value
-
- The UID STORE command is identical to the STORE command, with
- the exception that the numbers used in the sequence are unique
- identifiers instead of message numbers.
-
-
- tag SEARCH search_criteria
-
- The SEARCH command searches the mailbox for messages that match
- the given set of criteria. The unsolicited SEARCH <1#number>
- response from the server is a list of messages that express the
- intersection (AND function) of all the messages that match that
- criteria. For example,
- A003 SEARCH DELETED FROM "SMITH" SINCE 1-OCT-87
- returns the message numbers for all deleted messages from Smith
-
-
-
- Crispin [Page 23]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- that were placed in the mail file since October 1, 1987.
-
- In all search criteria that use strings, a message matches the
- criteria if the string is a substring of the field. The matching
- is case-independent except as noted below.
-
- The server may interpret an RFC 1522 format string to express text
- in a character set other than US-ASCII. The criteria matches if
- the RFC 1522 interpreted string matches an interpreted substring
- (MIME or RFC 1522 as appropriate) of the field.
-
- A server implementation may omit case-independent matching on RFC
- 1522 strings.
-
- The currently defined search criteria are:
-
- ALL All messages in the mailbox; the default
- initial criterion for ANDing.
-
- ANSWERED Messages with the \ANSWERED flag set.
-
- BCC istring Messages that contain the specified string
- in the envelope's BCC field.
-
- BEFORE date Messages whose internal date is earlier than
- the specified date.
-
- BODY istring Messages that contain the specified string
- in the body of the message.
-
- CC istring Messages that contain the specified string
- in the envelope's CC field.
-
- DELETED Messages with the \DELETED flag set.
-
- FLAGGED Messages with the \FLAGGED flag set.
-
- FROM istring Messages that contain the specified string
- in the envelope's FROM field.
-
- KEYWORD flag Messages with the specified flag set.
-
- NEW Messages that have the \RECENT flag set but
- not the \SEEN flag. This is functionally
- equivalent to "RECENT UNSEEN".
-
- OLD Messages that do not have the \RECENT flag
- set.
-
-
-
- Crispin [Page 24]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- ON date Messages whose internal date is within the
- specified date.
-
- RECENT Messages that have the \RECENT flag set.
-
- SEEN Messages that have the \SEEN flag set.
-
- SINCE date Messages whose internal date is later than
- the specified date.
-
- SUBJECT istring Messages that contain the specified string
- in the envelope's SUBJECT field.
-
- TEXT istring Messages that contain the specified string.
-
- TO istring Messages that contain the specified string in
- the envelope's TO field.
-
- UNANSWERED Messages that do not have the \ANSWERED flag
- set.
-
- UNDELETED Messages that do not have the \DELETED flag
- set.
-
- UNFLAGGED Messages that do not have the \FLAGGED flag
- set.
-
- UNKEYWORD flag Messages that do not have the specified flag
- set.
-
- UNSEEN Messages that do not have the \SEEN flag set.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Crispin [Page 25]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- Responses
-
- The first group of responses complete a request, and indicate whether
- the command was successful. The response text is a line of human
- readable text, optionally prefixed by an atom inside square brackets
- that conveys a special information token between cooperating servers
- and clients.
-
- The currently defined special information tokens are:
-
- PARSE An error occurred in parsing the RFC 822 or MIME
- headers of a message in the mailbox.
-
- READ-ONLY The mailbox is open read-only, or its access while
- open has changed from read-write to read-only.
-
- READ-WRITE The mailbox is open read-write, or its access while
- open has changed from read-only to read-write.
-
- TRYCREATE An APPEND or COPY attempt failed because the target
- mailbox does not exist. The server sends this as a
- hint to the client that the operation would probably
- succeed if the mailbox is first created by means of
- the CREATE command.
-
- UNSEEN Followed by a decimal number, indicates the number
- of the first unread message. This is intended to be
- used with certain bboard formats to assist the user
- in finding the first unread message in those cases
- where "unread" and "recent" are separate concepts.
-
- hex string A hexadecimal string is returned as a special
- information token to represent a Kerberos return
- authenticator. This only occurs in response to a
- LOGIN command that uses Kerberos authentication.
-
- Other special information tokens defined by particular client or
- server implementations should be prefixed with an "X" until they are
- added to a revision of this protocol.
-
-
- tag OK response_text
-
- This response identifies successful completion of the command with
- that tag. The response text may be useful in a protocol telemetry
- log for debugging purposes.
-
-
-
-
-
- Crispin [Page 26]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- tag NO response_text
-
- This response identifies unsuccessful completion of the command
- with that tag. The text is a line of human-readable text that
- probably should be displayed to the user in an error report by the
- client.
-
-
- tag BAD response_text
-
- This response identifies faulty protocol received from the client;
- The text is a line of human-readable text that should be recorded
- in any telemetry as part of a bug report to the maintainer of the
- client.
-
-
- The second group of responses convey human-readable information. The
- response text is a line of human readable text, optionally prefixed
- by an atom inside square brackets that conveys special information
- between cooperating servers and clients.
-
-
- * PREAUTH response_text
-
- This response is one of three possible greetings at session
- startup. It indicates that the session has already been
- authenticated by external means and thus no LOGIN command is
- needed.
-
-
- * OK response_text
-
- This response identifies an information message from the server.
- It does not indicate completion of any particular request, nor is
- it necessarily related to any request. The text is a line of
- human-readable text that should be presented to the user as an
- information message.
-
- This response is also one of three possible greetings at session
- startup. It indicates that the session is not yet authenticated
- and that a LOGIN command is needed.
-
-
- * NO response_text
-
- This response identifies a warning message from the server. It
- does not indicate completion of any request, nor is it necessarily
- related to any request. The text is a line of human-readable text
-
-
-
- Crispin [Page 27]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- that should be presented to the user as a warning of improper
- operation.
-
-
- * BAD response_text
-
- This response identifies a serious error message from the server.
- It does not indicate completion of any request, nor is it
- necessarily related to any request. It may also indicate a faulty
- command from the client in which a tag could not be parsed. The
- text is a line of human-readable text that should be presented to
- the user as a serious or possibly fatal error.
-
-
- * BYE text
-
- This response identifies that the server is about to close the
- connection. The text is a line of human-readable text that should
- be displayed to the user in a status report by the client. This
- may be sent as part of a normal logout sequence, or as a panic
- shutdown announcement by the server. It is also used by some
- servers as an announcement of an inactivity autologout.
-
- This response is also one of three possible greetings at session
- startup. It indicates that the server is not willing to accept a
- session from this client.
-
-
- The third group of responses convey data about the mailbox or
- messages inside the mailbox. This is how message data are
- transmitted from the server to the client.
-
-
- * MAILBOX mstring
-
- This response occurs as a result of a FIND command for MAILBOXES
- and ALL.MAILBOXES. The string is a mailbox name that matches the
- pattern in the command.
-
-
- * BBOARD mstring
-
- This response occurs as a result of a FIND command for BBOARDS and
- ALL.BBOARDS. The string is a bulletin board name that matches the
- pattern in the command.
-
-
-
-
-
-
- Crispin [Page 28]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- * SEARCH number(s)
-
- This response occurs as a result of a SEARCH command. The
- number(s) refer to those messages that match the search criteria.
- Each number is delimited by a space, e.g., "SEARCH 2 3 6".
-
-
- * FLAGS flag_list
-
- This response generally occurs as a result of a selection command
- (SELECT, BBOARD, and EXAMINE). The flag list are the list of
- flags (at a minimum, the system-defined flags) that are applicable
- for this mailbox. Flags other than the system flags are a
- function of the server implementation.
-
-
- * number message_data
-
- This response occurs as a result of any command when a mailbox is
- selected. The message_data is one of the following:
-
-
- EXISTS The number of messages in the mailbox.
-
-
- RECENT The number of messages that have arrived since the
- previous time this mailbox was read.
-
-
- EXPUNGE The specified message number has been permanently
- removed from the mailbox, and the next message in the
- mailbox (if any) becomes that message number.
-
- An unsolicited EXPUNGE response MUST NOT be sent except
- while responding to a request other than FETCH, STORE,
- or SEARCH. All references to message numbers sent after
- an unsolicited EXPUNGE response are adjusted to reflect
- the effect of the expunge.
-
- Discussion: a potential ambiguity exists with
- the FETCH, STORE, and SEARCH requests if the
- server is permitted to send unsolicited EXPUNGE
- responses. This is because these requests can be
- streamed. If two successive FETCH requests are
- streamed, and if during the time of the processing
- of the first request there is an expunge response,
- then the sequence of the second request is no
- longer valid.
-
-
-
- Crispin [Page 29]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- FETCH data
- This is the principal means that data about a message
- are returned to the client. The data are in an
- S-expression form, and consists of a sequence of pairs
- of data item name and their values. The current data
- items are:
-
- BODY Similar to BODYSTRUCTURE, but without the extension
- data.
-
- BODY[section] A string expressing the body contents of the
- specified section. The string should be
- interpreted by the client according to the
- content transfer encoding, body type, and subtype.
-
- Note that non-textual data are transfer encoded;
- therefore, the string is likely to be 7-bit
- US-ASCII. This is NOT necessarily the byte size
- or character set of the interpreted result.
-
- BODYSTRUCTURE An S-expression format list that describes the
- body of a message. The body is computed by the
- server by parsing the RFC 822 header and body into
- the component parts, defaulting various fields
- as necessary.
-
- Multiple parts are indicated by S-expression
- nesting. Instead of a body type as the first element
- of the list there is a nested body. The second
- element of the list is the multipart subtype (mixed,
- digest, parallel, alternative, etc.).
-
- Extension data follows the multipart subtype.
- Extension data is never returned with the older
- BODY fetch, but may be returned with a BODYSTRUCTURE
- fetch. Extension data, if present, must be in the
- defined order.
-
- No multipart extension data is currently defined.
-
- Any subsequent data is extension data, not yet defined
- in this version of the protocol. Such extension data
- consist of zero or more NILs, strings, numbers,
- and/or potentially nested lists of such data. Clients
- which do a BODYSTRUCTURE fetch MUST be prepared to
- accept such extension data. Servers MUST NOT send
- such extension data until it has been defined by a
- future version of the protocol.
-
-
-
- Crispin [Page 30]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- The basic fields of a non-multipart body part are in
- the following order:
- body type - a string giving the content type name
- as defined in MIME
- body subtype - a string giving the content subtype
- name as defined in MIME
- body parameter list - an S-expression list of
- attribute/value pairs [e.g. (foo bar baz rag)
- where "bar" is the value of "foo" and "rag" is
- the value of "baz"] as defined in MIME.
- body id - a string giving the content id as
- defined in MIME.
- body description - a string giving the content
- description as defined in MIME.
- body encoding - a string giving the content
- transfer encoding as defined in MIME.
- body size - a number giving the size of the
- body in octets. Note that this size is the
- size in its transfer encoding and not the
- resulting size after any decoding.
-
- A body type of type MESSAGE and subtype RFC822
- contains, immediately after the basic fields,
- the envelope of the encapsulated message, its
- body structure, and its size in text lines.
-
- A body type of type TEXT contains, immediately
- after the basic fields, the size of the body
- in text lines. Note that this size is the size
- in its transfer encoding and not the resulting
- size after any decoding.
-
- Extension data follows the basic fields and the
- type-specific fields listed above. Extension data
- is never returned with the older BODY fetch, but
- may be returned with a BODYSTRUCTURE fetch.
- Extension data, if present, must be in the defined
- order.
-
- The extension data of a non-multipart body part are
- in the following order:
- body MD5 - a string giving the content MD5 value
- as defined in MIME
-
- Any subsequent extension data are not yet defined
- in this version of the protocol, and would be in the
- form described above under multipart extension data.
-
-
-
-
- Crispin [Page 31]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- ENVELOPE An S-expression format list that describes the
- envelope of a message. The envelope is computed
- by the server by parsing the RFC 822 header into
- the component parts, defaulting various fields
- as necessary.
-
- The fields of the envelope are in the following
- order: date, subject, from, sender, reply-to, to,
- cc, bcc, in-reply-to, and message-id. The date,
- subject, in-reply-to, and message-id fields are
- strings. The from, sender, reply-to, to, cc,
- and bcc fields are lists of addresses.
-
- An address is an S-expression format list that
- describes an electronic mail address. The fields
- of an address are in the following order:
- personal name, source-route (a.k.a. the
- at-domain-list in SMTP), mailbox name, and
- host name.
-
- RFC 822 group syntax is indicated by a special
- form of address in which the host name field is
- NIL. If the mailbox name field is also NIL, this
- is an end of group marker (semi-colon in RFC 822
- syntax). If the mailbox name field is non-NIL,
- this is a start of group marker, and the mailbox
- name field holds the group name phrase.
-
- Any field of an envelope or address that is
- not applicable is presented as the atom NIL.
- Note that the server must default the reply-to
- and sender fields from the from field; a client is
- not expected to know to do this.
-
- FLAGS An S-expression format list of flags that are set
- for this message. This may include the following
- system flags:
-
- \SEEN Message has been read
- \ANSWERED Message has been answered
- \FLAGGED Message is "flagged" for
- urgent/special attention
- \DELETED Message is "deleted" for
- removal by later EXPUNGE
-
-
-
-
-
-
-
- Crispin [Page 32]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- as well as the following special flag:
-
- \RECENT Message arrived since the
- previous time this mailbox
- was read
-
- INTERNALDATE A string containing the date and time the
- message was written to the mailbox.
-
- RFC822 A string expressing the message in RFC 822
- format.
-
- RFC822.HEADER A string expressing the RFC 822 format header
- of the message, including the delimiting
- blank line between the header and the body.
- This is used for the FETCH data items
- RFC822.HEADER, RFC822.HEADER.LINES, and
- RFC822.HEADER.LINES.NOT (note that a blank
- line is always included regardless of header
- line restrictions).
-
- RFC822.SIZE A number indicating the number of
- characters in the message as expressed
- in RFC 822 format.
-
- RFC822.TEXT A string expressing the text body of the
- message, omitting the RFC 822 header.
-
- UID A number expressing the unique identifier
- of the message.
-
-
- COPY Obsolete. New server implementations MUST NOT transmit
- this response. Client implementations SHOULD ignore
- this response (not report an error).
-
-
- STORE data
- Obsolete and functionally equivalent to FETCH. New
- server implementations MUST NOT transmit this response.
- Client implementations SHOULD treat this response as
- equivalent to the FETCH response.
-
-
-
-
-
-
-
-
-
- Crispin [Page 33]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- The final group of responses contains a single, special purpose
- response.
-
- + response_text
-
- This response identifies that the server is ready to accept the
- text of a literal from the client. The text of this response is a
- line of human-readable text of the server's choosing (it is
- generally never seen by a client's human user).
-
- The purpose of this command is to solve a synchronization problem
- that can occur if a string in a command is a literal. This may
- occur when logging in (if the password contains "funny"
- characters), and always occurs when using the APPEND command,
- since a message consists of multiple lines.
-
- Normally, a command from the client is a single text line. If the
- server detects an error in the command, it can simply discard the
- remainder of the line. It cannot do this for commands that
- contain literals, since a literal can be an arbitrarily long
- amount of text, and the server may not even be expecting a
- literal. This mechanism is provided so the client knows not to
- send a literal until the server expects it, preserving
- client/server synchronization.
-
- No such synchronization protection is provided for literals sent
- from the server to the client. Any synchronization problems in
- this direction would be caused by a bug in the client or server.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Crispin [Page 34]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- Sample IMAP2bis session
-
- The following is a transcript of an IMAP2bis session. A long line in
- this sample is broken for editorial clarity.
-
- S: * OK IMAP2bis Service 7.2(62) at Thu, 29 Jul 1993 21:34:23 -0700 (PDT)
- C: a001 login mrc secret
- S: a001 OK LOGIN completed
- C: a002 select inbox
- S: * 18 EXISTS
- S: * FLAGS (\Answered \Flagged \Deleted \Seen)
- S: * 0 RECENT
- S: a002 OK [READ-WRITE] SELECT completed
- S: a003 fetch 12 full
- S: * 12 FETCH (FLAGS (\Seen) INTERNALDATE "14-Jul-1993 02:44:25 -0700"
- RFC822.SIZE 4282 ENVELOPE ("Wed, 14 Jul 1993 02:23:25 -0700 (PDT)"
- "IMAP2bis WG mtg summary and minutes" (("Terry Gray" NIL "gray"
- "cac.washington.edu")) ((NIL NIL "owner-imap" "cac.washington.edu"))
- (("Terry Gray" NIL "gray" "cac.washington.edu")) ((NIL NIL "imap"
- "cac.washington.edu")) ((NIL NIL "minutes" "CNRI.Reston.VA.US")
- ("John C Klensin" NIL "KLENSIN" "INFOODS.MIT.EDU")("Erik Huizer"
- NIL "Erik.Huizer" "SURFnet.nl")) NIL NIL
- "<Pine.3.84.9307140123.B27397-0100000@shiva2.cac.washington.edu>")
- BODY ("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 3028 92))
- S: a003 OK FETCH completed
- C: a004 fetch 12 rfc822.header
- S: * 12 FETCH (RFC822.HEADER {485}
- S: Date: Wed, 14 Jul 1993 02:23:25 -0700 (PDT)
- S: From: Terry Gray <gray@cac.washington.edu>
- S: Reply-To: Terry Gray <gray@cac.washington.edu>
- S: Subject: IMAP2bis WG mtg summary and minutes
- S: To: imap@cac.washington.edu
- S: Cc: minutes@CNRI.Reston.VA.US,
- S: John C Klensin <KLENSIN@INFOODS.MIT.EDU>,
- S: Erik Huizer <Erik.Huizer@SURFnet.nl>
- S: Message-Id:
- S: <Pine.3.84.9307140123.B27397-0100000@shiva2.cac.washington.edu>
- S: Mime-Version: 1.0
- S: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
- S:
- S: )
- S: a004 OK FETCH completed
- C: a005 store 12 +flags \deleted
- S: * 12 FETCH (FLAGS (\Seen \Deleted))
- S: a005 OK +FLAGS completed
- C: a006 logout
- S: * BYE IMAP2bis server terminating connection
- S: a006 OK LOGOUT completed
-
-
-
- Crispin [Page 35]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- Design Discussion
-
- IMAP2bis is a textual protocol. The use of MIME encoding in IMAP2bis
- makes it possible to support 8-bit textual and binary mail.
-
- IMAP2bis implementations MAY transmit 8-bit or multi-octet characters
- in literals, but should do so only when the character set is
- identified. For example, 8-bit characters are specifically permitted
- in MIME body parts (fetching BODY[section]) of type TEXT. 8-bit
- characters are also permitted in the argument to APPEND.
-
- Servers MUST NOT transmit 8-bit characters in RFC822.HEADER fetch
- results. Servers MUST NOT transmit 8-bit characters in RFC822.TEXT
- (and by extension RFC822) fetch results, unless there are MIME data
- in the message that identify the character sets of all 8-bit data.
-
- Because 8-bit characters are permitted in the argument to APPEND, a
- server that is unable to preserve 8-bit data properly MUST be able to
- reversibly convert 8-bit APPEND data to 7-bit using MIME.
-
- Although a BINARY body encoding is defined, IMAP2bis does not permit
- unencoded binary strings. A "binary string" is any string with NUL
- characters; a string with an excessive amount of CTL characters may
- also be considered to be binary. The mixing of unencoded binary in
- the same stream as textual commands would make the protocol more
- vulnerable to synchronization problems. Implementations MUST encode
- binary data into BASE64 before transmitting it with IMAP2bis.
-
- When operating in the online model, an IMAP2bis client should
- maintain a local cache of data from the mailbox. This cache is an
- incomplete model of the mailbox, and at startup is generally empty.
- As the client processes all unsolicited data, it updates the cache
- based on this data. When a tagged response arrives, the client's
- cache has been updated from the associated request.
-
- Note that a server can send data that the client did not request,
- such as mailbox size or flag updates. A server MUST send mailbox
- size updates automatically while processing a command. A server
- SHOULD send message flag updates automatically, without requiring the
- client to request such updates explicitly.
-
- Regardless of what implementation decisions a client may take on
- caching, a client MUST record EXISTS and RECENT updates and MUST NOT
- assume that a CHECK or NOOP command will return EXISTS or RECENT
- information.
-
- Although it is permitted for a server to send an unsolicited response
- while there is no command in progress, this practice SHOULD NOT be
-
-
-
- Crispin [Page 36]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- followed because of flow control considerations. It can cause an
- incautious implementation to deadlock. A deadlock is avoided if
- either of the following conditions are true: (1) except for the
- greeting, the server never sends responses while there is no command
- in progress; (2) the server process is capable of reading commands
- while sending data. The latter condition generally requires a either
- a multi-threading server implementation or use of a polling facility
- and non-blocking I/O.
-
- If a server has an inactivity autologout timer, that timer MUST be of
- at least 30 minutes' duration. The receipt of a NOOP command from
- the client during that interval should suffice to reset the
- autologout timer. Periodic transmission of a NOOP from the client
- during periods of inactivity also has the benefit of avoiding the
- possible deadlock noted above.
-
- It is frequently asked why there is no message posting function in
- IMAP2bis. Message posting is orthogonal to the scope of a mail
- access protocol and detracts from its primary focus. SMTP (RFC 821)
- provides the minimal functionality needed for message posting without
- losing valuable capabilities (such as blind carbon copies). Any
- message posting function in IMAP2bis would need, at a minimum, to
- provide equivalent functionality.
-
- At the time of the writing of this document, an extensive set of
- extensions to SMTP is in the Internet standards process. Should
- those extensions become an Internet Standard it would be necessary to
- revise IMAP2bis again to provide corresponding capabilities, were a
- message posting facility to be included in IMAP2bis. In other words,
- a duplication of effort would be required each time a change is made
- to message transport technology.
-
- Another undesirable aspect of message posting in IMAP2bis occurs when
- a remote server is used. It is unlikely that a client would support
- multiple means of posting a message. It adds excessive size and
- complexity that can not be afforded, particularly on smaller
- machines. It also can lead to poor performance. Consider a client
- connecting to an IMAP2bis server over an interactive satellite link
- to a foreign country. A local message posting (SMTP) server is
- available that uses a lower-cost batched link. Here, it would be
- wasteful to use the interactive link for posting.
-
- Message posting to IMAP2bis has been suggested as a means of
- authenticating postings. The problem is that access authentication
- credentials are not necessarily the same as posting authentication
- credentials. At some sites, the disclosure of a portion of access
- authentication credentials in a mail message (as a "From" or "Sender"
- address) may be a serious security breach of greater significance
-
-
-
- Crispin [Page 37]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- than forged mail.
-
- The Internet message transport infrastructure has no concept of
- authentication credentials, and neither authentication syntax nor
- semantics are transferred within a message. As a result, any attempt
- at authenticating a message via posting authentication is completely
- ineffective once the message leaves the authenticating server; any
- indication of authentication in the message can easily be reproduced
- further down the line. Public-key based message authentication
- systems such as Privacy Enhanced Mail are now under development to
- address this problem.
-
- IMAP2bis does not address problems with multiple IMAP2bis servers at
- a single site, access control lists, and mobility of client
- configuration and address book information. These and other issues
- are being considered for a companion protocol.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Crispin [Page 38]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- Formal Syntax
-
- The following syntax specification uses the augmented Backus-Naur
- Form (BNF) notation as specified in RFC 822 with one exception; the
- delimiter used with the "#" construct is a single space (SPACE) and
- not a comma.
-
- Except as noted otherwise, all alphabetic characters in the IMAP2bis
- protocol are case-insensitive. For example, "LOGIN", "login" and
- "lOgIn" are all valid as the login command.
-
- Syntax marked as obsolete may be encountered with implementations
- written for an older version of this specification. New
- implementations SHOULD accept obsolete syntax as input, but MUST NOT
- otherwise use it.
-
- address ::= "(" addr_name SPACE addr_adl SPACE addr_mailbox
- SPACE addr_host ")"
-
- addr_adl ::= nstring
-
- addr_host ::= nstring
- ;; NIL indicates RFC 822 group syntax
-
- addr_mailbox ::= nstring
- ;; NIL indicates end of RFC 822 group; if non-NIL
- ;; and addr_host is NIL, holds RFC 822 group name
-
- addr_name ::= nstring
-
- append ::= "APPEND" SPACE mailbox [SPACE 1#flag] SPACE literal
-
- astring ::= atom / string
-
- atom ::= 1*<any CHAR except specials, SPACE, and CTLs>
-
- bboard ::= "BBOARD" SPACE mailbox_bboard
-
- body ::= "(" body_structure ")"
-
- body2 ::= "(" body2_structure ")"
-
- body2_extension ::= nstring / number / "(" 1#body2_extension ")"
- ;; Future expansion. Clients MUST accept body2
- ;; extension fields. Servers MUST NOT generate
- ;; body2 extension fields.
-
-
-
-
-
- Crispin [Page 39]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- body2_md5 ::= nstring
- ;; reserved for MD5 checksum
-
- body2_multipart ::= 1*body2 SPACE body_subtype [SPACE 1#body2_extension]
-
- body2_structure ::= body2_terminal / body2_multipart
-
- body2_terminal ::= body_terminal SPACE body2_md5 [SPACE 1#body2_extension]
-
- body_basic ::= body_type_basic SPACE body_subtype SPACE body_fields
-
- body_fields ::= body_parameter SPACE body_id SPACE body_description
- SPACE body_encoding SPACE body_size
-
- body_description::= nstring
-
- body_encoding ::= <"> body_enc_def <"> / body_enc_other
-
- body_enc_def ::= "7BIT" / "8BIT" / "BINARY" / "BASE64"/
- "QUOTED-PRINTABLE"
-
- body_enc_other ::= string
-
- body_id ::= nstring
-
- body_msg ::= body_msg_822 / body_msg_other
-
- body_msg_822 ::= body_type_msg SPACE body_subtyp_822 SPACE body_fields
- SPACE envelope SPACE body SPACE body_size_lines
-
- body_msg_other ::= body_type_msg SPACE body_subtype SPACE body_fields
- ;; subtype MUST NOT be "RFC822"
-
- body_multipart ::= 1*body SPACE body_subtype
-
- body_parameter ::= nil / "(" 1#(string string) ")"
-
- body_section ::= number / number "." body_section
-
- body_size ::= number
- ;; size in octets
-
- body_size_lines ::= number
-
- body_structure ::= body_terminal / body_multipart
-
- body_subtype ::= string
-
-
-
-
- Crispin [Page 40]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- body_subtyp_822 ::= <"> "RFC822" <">
-
- body_terminal ::= body_basic / body_msg / body_text
-
- body_text ::= body_type_text SPACE body_subtype SPACE body_fields
- SPACE body_size_lines
-
- body_type_basic ::= <"> ("APPLICATION" / "AUDIO" / "IMAGE" / "VIDEO") <"> /
- string
-
- body_type_msg ::= <"> "MESSAGE" <">
-
- body_type_text ::= <"> "TEXT" <">
-
- CHAR ::= <any 7-bit US-ASCII character except NUL, 0x01 - 0x7f>
-
- CHAR8 ::= <any 8-bit octet except NUL, 0x01 - 0xff>
-
- check ::= "CHECK"
-
- copy ::= "COPY" SPACE sequence SPACE mailbox
-
- CR ::= <ASCII CR, carriage return, 0x0C>
-
- create ::= create_real / create_check
-
- create_check ::= "CREATE" SPACE "INBOX"
- ;; returns a NO response (not BAD)
-
- create_real ::= "CREATE" SPACE mailbox_other
-
- CRLF ::= CR LF
-
- CTL ::= <any ASCII control character and DEL, 0x00 - 0x1f, 0x7f>
-
- date ::= date_new / date_old
-
- date_day ::= 1*2DIGIT
- ;; day of month
-
- date_month ::= "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" /
- "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec"
-
- date_new ::= date_day "-" date_month "-" date_year
-
- date_old ::= date_day "-" date_month "-" date_year_old
- ;; Obsolete
-
-
-
-
- Crispin [Page 41]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- date_year ::= 4DIGIT / date_year_old
-
- date_year_old ::= 2DIGIT
- ;; Obsolete, (year - 1900)
-
- date_time ::= date_time_new / date_time_old
-
- date_time_new ::= date_new SPACE time SPACE zone
-
- date_time_old ::= date_old SPACE time "-" zone_old
- ;; Obsolete
-
- delete ::= "DELETE" SPACE mailbox_other
-
- DIGIT ::= <any ASCII decimal digit, 0x30 - 0x39>
-
- DIGIT_HEX :: DIGIT / "a" / "b" / "c" / "d" / "e" / "f"
-
- envelope ::= "(" env_date SPACE env_subject SPACE env_from SPACE
- env_sender SPACE env_reply-to SPACE env_to SPACE
- env_cc SPACE env_bcc SPACE env_in-reply-to SPACE
- env_message-id ")"
-
- env_bcc ::= nil / "(" 1*address ")"
-
- env_cc ::= nil / "(" 1*address ")"
-
- env_date ::= nstring
-
- env_from ::= nil / "(" 1*address ")"
-
- env_in-reply-to ::= nstring
-
- env_message-id ::= nstring
-
- env_reply-to ::= nil / "(" 1*address ")"
-
- env_sender ::= nil / "(" 1*address ")"
-
- env_subject ::= nstring
-
- env_to ::= nil / "(" 1*address ")"
-
- examine ::= "EXAMINE" SPACE mailbox
-
- expunge ::= "EXPUNGE"
-
-
-
-
-
- Crispin [Page 42]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- fetch ::= "FETCH" SPACE sequence SPACE ("ALL" / "FULL" /
- "FAST" / fetch_att / "(" 1#fetch_att ")")
-
- fetch_att ::= fetch_att_other / fetch_att_text
-
- fetch_att_other ::= "BODY" / "BODYSTRUCTURE" / "ENVELOPE" / "FLAGS" /
- "INTERNALDATE" / "RFC822.SIZE" / "UID"
-
- fetch_att_text ::= "BODY[" body_section "]" / "RFC822" /
- "RFC822.HEADER" /
- "RFC822.HEADER.LINES" SPACE header_line_list /
- "RFC822.HEADER.LINES.NOT" SPACE header_line_list /
- "RFC822.TEXT"
-
- find ::= find_mailbox / find_bboard
-
- find_bboard ::= find_bboards / find_boards_all
-
- find_bboards ::= "FIND" SPACE "BBOARDS" SPACE find_pattern
-
- find_bboards_all
- ::= "FIND" SPACE "ALL.BBOARDS" SPACE find_pattern
-
- find_mailbox ::= find_mailboxes / find_mailboxes_all
-
- find_mailboxes ::= "FIND" SPACE "MAILBOXES" SPACE find_pattern
-
- find_mailboxes_all
- ::= "FIND" SPACE "ALL.MAILBOXES" SPACE find_pattern
-
- find_pattern ::= astring
- ;; includes find_wildcards
-
- find_wildcards ::= "%" / "?" / "*"
-
- flag ::= user_flag / system_flag
-
- flag_list ::= "(" 1#flag ")"
-
- flags ::= 1#flag / flag_list
-
- greeting ::= "*" SPACE (human_data / "PREAUTH" SPACE response_text)
-
- header_line ::= astring
-
- header_line_list ::= "(" 1#header_line ")"
-
-
-
-
-
- Crispin [Page 43]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- human_data ::= "OK" SPACE response_text / "NO" SPACE response_text /
- "BAD" SPACE response_text / "BYE" SPACE response_text
-
- inbox ::= "INBOX"
- ;; case-independent, but SHOULD be upper-case
-
- istring ::= astring
- ;; possible RFC 1522 format data
-
- kerberos_authenticator
- ::= 1*DIGIT_HEX
-
- kerberos_response
- ::= 1*DIGIT_HEX
-
- LF ::= <ASCII LF, line feed, 0x0A>
-
- literal ::= "{" number "}" CRLF 1*CHAR8
- ;; The number represents the number of CHAR8 octets.
-
- login ::= "LOGIN" SPACE userid SPACE password
-
- logout ::= "LOGOUT"
-
- mailbox ::= inbox / mailbox_other
-
- mailbox_bboard ::= astring
- ;; May not be INBOX (in any case). Should not
- ;; include find_wildcards. May be case-dependent
- ;; as a function of server implementation. May
- ;; be a different namespace from mailbox_other.
-
- mailbox_other ::= astring
- ;; May not be INBOX (in any case). Should not
- ;; include find_wildcards. May be case-dependent
- ;; as a function of server implementation
-
- mailbox_data ::= "MAILBOX" SPACE mstring / "BBOARD" SPACE mstring /
- "SEARCH" SPACE 1#number / "FLAGS" SPACE flag_list
-
- message_data ::= number SPACE (msg_exists / msg_recent / msg_expunge /
- msg_fetch / msg_obsolete)
-
- msg_copy ::= "COPY"
- ;; Obsolete
-
- msg_exists ::= "EXISTS"
-
-
-
-
- Crispin [Page 44]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- msg_expunge ::= "EXPUNGE"
-
- msg_fetch ::= "FETCH" SPACE "(" 1#("BODY" SPACE body /
- "BODYSTRUCTURE" SPACE body2 /
- "BODY[" body_section "]" nstring /
- "ENVELOPE" SPACE envelope /
- "FLAGS" SPACE "(" 1#(recent_flag / flag) ")" /
- "INTERNALDATE" SPACE date_time /
- "RFC822" SPACE nstring /
- "RFC822.HEADER" SPACE nstring /
- "RFC822.SIZE" SPACE number /
- "RFC822.TEXT" SPACE nstring /
- "UID" SPACE uniqueid) ")"
-
- msg_obsolete ::= msg_copy / msg_store
- ;; Obsolete unsolicited data responses
-
- msg_recent ::= "RECENT"
-
- msg_store ::= "STORE" SPACE "(" 1#("FLAGS" SPACE
- "(" 1#(recent_flag / flag) "))"
- ;; Obsolete
-
- mstring ::= text_line
- ;; Represents a mailbox
-
- nil ::= "NIL"
-
- noop ::= "NOOP"
-
- nstring ::= nil / string
-
- number ::= 1*DIGIT
-
- partial ::= "PARTIAL" SPACE number SPACE fetch_att_text SPACE
- number SPACE number
-
- password ::= astring / "@KERBEROS:" kerberos_authenticator
-
- QCHAR ::= <any CHAR except qspecials, CR, and LF>
-
- qspecials ::= <"> / "%" / "\"
-
- quoted_string ::= <"> *QCHAR <">
-
- recent_flag ::= "\RECENT"
-
- ready ::= "+" SPACE response_text
-
-
-
- Crispin [Page 45]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- rename ::= "RENAME" SPACE mailbox SPACE mailbox_other
-
- request ::= tag SPACE (request_auth / request_authed / request_open)
- ;; modal based on state
-
- request_any ::= noop / logout
- ;; valid in all modes
-
- request_auth ::= request_any / login
- ;; valid only when in not authenticated mode
-
- request_authed ::= request_any / create / delete / rename / find /
- subscribe / unsubscribe / select / examine / bboard /
- append / x_command
- ;; valid only when in authenticated or mailbox open mode
-
- request_open ::= request_authed / check / expunge / copy / fetch /
- partial / store / uid / search / x_command
- ;; valid only when in mailbox open mode
-
- response ::= tag SPACE ("OK" / "NO" / "BAD") SPACE response_text CRLF
-
- response_code ::= "PARSE" / "READ-ONLY" / "READ-WRITE" / "TRYCREATE" /
- "UNSEEN" / "X" atom / kerberos_response
-
- response_text ::= ("[" response_code "]" SPACE text_line) /
- ("[UNSEEN]" SPACE number SPACE text_line) / text_line
-
- search ::= "SEARCH" SPACE 1#("ALL" / "ANSWERED" /
- "BCC" SPACE istring / "BEFORE" SPACE day /
- "BODY" SPACE istring / "CC" SPACE istring / "DELETED" /
- "FLAGGED" / "FROM" space istring /
- "KEYWORD" SPACE user_flag / "NEW" / "OLD" /
- "ON" SPACE day / "RECENT" / "SEEN" /
- "SINCE" SPACE day / "SUBJECT" SPACE istring /
- "TEXT" SPACE istring / "TO" SPACE istring /
- "UNANSWERED" / "UNDELETED" / "UNFLAGGED" /
- "UNKEYWORD" SPACE user_flag / "UNSEEN")
-
- select ::= "SELECT" SPACE mailbox
-
- sequence ::= number / (sequence "," sequence) / (number ":" number)
- ;; identifies a set of messages by consecutive numbers
- ;; from 1 to the number of messages in the mailbox.
- ;; Comma delimits individual numbers, colon delimits
- ;; between two numbers inclusive.
- ;; Example: 2,4:7,9,12:15 is 2,4,5,6,7,9,12,13,14,15
-
-
-
-
- Crispin [Page 46]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- SPACE ::= <ASCII SP, space, 0x20>
-
- specials ::= "(" / ")" / "{" / qspecials
-
- store ::= "STORE" SPACE sequence SPACE store_att
-
- store_att ::= "+FLAGS" SPACE flags / "-FLAGS" SPACE flags /
- "FLAGS" SPACE flags
-
- string ::= quoted_string / literal
-
- subscribe ::= subscribe_mailbox / subscribe_bboard
-
- subscribe_bboard
- ::= "SUBSCRIBE" SPACE "BBOARD" SPACE mailbox_bboard
-
- subscribe_mailbox
- ::= "SUBSCRIBE" SPACE "MAILBOX" SPACE mailbox
-
- system_flag ::= "\ANSWERED" / "\FLAGGED" / "\DELETED" / "\SEEN" /
- system_flag_new
-
- system_flag_new ::= "\" atom
- ;; future expansion
-
- tag ::= 1*<any CHAR except "*", specials, SPACE, and CTLs>
-
- text_line ::= 1*<any CHAR except CR and LF>
-
- time ::= 2DIGIT ":" 2DIGIT ":" 2DIGIT
- ;; hours minutes seconds
-
- uid ::= "UID" SPACE (uid_after / copy / fetch / store)
- ;; uniqueids used instead of message numbers
-
- uid_after ::= "AFTER" SPACE uniqueid
-
- uniqueid ::= number
- ;;; strictly ascending
-
- unsolicited ::= "*" SPACE (human_data / mailbox_data /
- message_data) CRLF
-
- unsubscribe ::= unsubscribe_mailbox / unsubscribe_bboard
-
- unsubscribe_bboard
- ::= "UNSUBSCRIBE" SPACE "BBOARD" SPACE mailbox_bboard
-
-
-
-
- Crispin [Page 47]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- unsubscribe_mailbox
- ::= "UNSUBSCRIBE" SPACE "MAILBOX" SPACE mailbox_mailbox
-
- userid ::= astring
-
- user_flag ::= atom
-
- x_command ::= "X" atom <optional arguments>
- ;; experimental expansion commands
-
- zone ::= ("+" / "-") 4DIGIT
- ;; Signed four-digit value of hhmm representing
- ;; hours and minutes west of Greenwich (that is,
- ;; (the amount that the given time differs from
- ;; Universal Time). Subtracting the timezone
- ;; from the given time will give the UT form.
- ;; The Universal Time zone is "+0000".
-
- zone_old ::= "UT" / "GMT" / "Z" / ;; +0000
- "AST" / "EST" / "CST" / "MST" / ;; -0400 to -0700
- "PST" / "YST" / "HST" / "BST" / ;; -0800 to -1100
- "ADT" / "EDT" / "CDT" / "MDT" / ;; -0300 to -0600
- "PDT" / "YDT" / "HDT" / "BDT" / ;; -0700 to -1000
- "A" / "B" / "C" / "D" / "E" / "F" / ;; +0100 to +0600
- "G" / "H" / "I" / "K" / "L" / "M" / ;; +0700 to +1200
- "N" / "O" / "P" / "Q" / "R" / "S" / ;; -0100 to -0600
- "T" / "U" / "V" / "W" / "X" / "Y" ;; -0700 to -1200
- ;; Obsolete
-
- A protocol session is as follows:
-
- Server: greeting
- *<Client: request (first part, if it contains a literal)
- *<Server: ready
- Client: request (next part)
- >
- Server: *<unsolicited>
- Server: response
- >
-
-
-
-
-
-
-
-
-
-
-
-
- Crispin [Page 48]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- Compatibility Notes
-
- This is a summary of hints and recommendations to enable an IMAP2bis
- implementation, written to this specification, to interoperate with
- implementations that conform to earlier specifications. None of
- these hints and recommendations are required by this specification;
- implementors must decide for themselves whether they want their
- implementation to fail if it encounters old software.
-
- IMAP2bis has been designed to be upwards compatible with earlier
- specifications. IMAP2bis facilities that were not in earlier
- specifications should be invisible to clients unless the client asks
- for the facility.
-
- This information may not be complete; it reflects current knowledge
- of server and client implementations as well as "folklore" acquired
- in the evolution of the protocol.
-
- IMAP2bis client interoperability with old servers
-
- In general, a client should be able to discover whether a server
- supports a facility by trial-and-error; if an attempt to use a
- facility generates a BAD response, the client can assume that the
- server does not support the facility.
-
- Some servers may disable certain commands as a matter of
- intentional site policy. For example, a bboard-only server may
- disable the SELECT command. Such servers should return a NO
- response to disabled commands instead of a BAD response.
-
- A quick way to check whether a server implementation supports this
- specification is to try a UID FETCH 0 UID command. An OK or NO
- response would indicate a server that conforms to this
- specification; a BAD response would indicate an older server.
-
- The CREATE, DELETE, and RENAME commands are new in IMAP2bis,
- and may not be present in old servers. A safe mechanism to
- test whether these commands are present is to try a CREATE
- INBOX command. If the response is NO, these commands are
- supported by the server. If the response is BAD, they are not.
- If the response is OK, the server's implementation is broken,
- since creating INBOX is not permitted.
-
- The FIND MAILBOXES and FIND BBOARDS commands are new in RFC
- 1176. A BAD response to these commands indicates a server that
- does not support any form of FIND. It also indicates a server
- that does not support SUBSCRIBE and UNSUBSCRIBE. Note that the
- definition of the FIND MAILBOXES and FIND BBOARDS commands in
-
-
-
- Crispin [Page 49]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- RFC 1176 differs from the definition in this specification; in
- RFC 1176 these commands were defined as returning a list of
- mailboxes or bulletin boards with no clear specification of
- whether the returned values were "subscribed" or "all possible"
- names.
-
- The FIND ALL.MAILBOXES and FIND ALL.BBOARDS commands are new in
- IMAP2bis. A BAD response to these commands indicates a server
- that does not support a concept of subscriptions to a mailbox
- or bulletin board. The server may support FIND MAILBOXES and
- FIND BBOARDS using the older RFC 1176 semantics.
-
- The SUBSCRIBE and UNSUBSCRIBE commands are new in IMAP2bis. A
- server that supports FIND ALL.MAILBOXES and FIND ALL.BBOARDS
- will also support the SUBSCRIBE and UNSUBSCRIBE commands.
-
- The EXAMINE command is new in IMAP2bis. A BAD response to this
- command indicates a server that does not support an explicit
- read-only mode of access, and a SELECT command should be used
- instead.
-
- Older server implementations may automatically create the
- destination mailbox on COPY if that mailbox does not already
- exist. This was how a new mailbox was created in older
- specifications. If the server does not support the CREATE
- command (see above for how to test for this), it will probably
- create a mailbox on COPY.
-
- The APPEND command is new in IMAP2bis. A way to see if this
- command is implemented is to try to append a zero-length stream
- to a mailbox name that is known not to exist (or at least,
- highly unlikely to exist) on the remote system.
-
- Although IMAP2bis clients SHOULD avoid asking for the same data
- more than once (by having a client-based cache of data returned
- by the server), this is not a requirement of the protocol.
- However, IMAP2bis clients MUST cache data from the EXISTS and
- RECENT unsolicited responses. Only the SELECT command is
- guaranteed to return EXISTS/RECENT information.
-
- The BODY, BODY[section], and FULL fetch data items are new in
- IMAP2bis. A BAD response to an attempt to fetch either data
- item indicates a server that does not support server-based MIME
- parsing.
-
- The BODYSTRUCTURE fetch data item is new in IMAP2bis. A BAD
- response to an attempt to fetch this data item indicates a
- server that does not support extensible results from server-
-
-
-
- Crispin [Page 50]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- based MIME parsing. The server may be running an earlier,
- experimental version of IMAP2bis and support the older, non-
- extensible, BODY fetch data item. A client should attempt this
- data item before deciding that the server does not support
- MIME.
-
- The use of nested part 0 of a part of type MESSAGE in a BODY or
- BODYSTRUCTURE fetch to get only the RFC 822 header of the
- message is new, and is not in earlier, experimental versions of
- IMAP2bis. A server that returns NIL is probably running the
- earlier version; with such servers the only way to obtain the
- RFC 822 header is to fetch the entire nested message.
-
- The RFC822.HEADER.LINES and RFC822.HEADER.LINES.NOT fetch data
- items are new in IMAP2bis. A BAD response to an attempt to
- fetch this data item indicates a server that does not support
- selective header fetching. A client should use RFC822.HEADER
- and remove the unwanted information.
-
- The UID fetch data item and the UID commands are new in
- IMAP2bis. A BAD response to an attempt to use these indicates
- a server that does not support unique identifiers.
-
- The PARTIAL command is new in IMAP2bis. If this command causes
- a BAD response, then the client should use the appropriate
- FETCH command and ignore the unwanted data.
-
- IMAP2bis client implementations must accept all responses and
- data formats documented in this specification, including those
- labeled as obsolete. This includes the COPY and STORE
- unsolicited responses and the old format of dates and times.
-
- Older server implementations may not provide a way to set flags
- on APPEND. Client implementations which receive a BAD response
- to an APPEND command with flags should retry the command
- without flags.
-
- Older server implementations may not preserve flags on COPY.
- Some server implementations may not permit the preservation of
- certain flags on COPY or their setting with APPEND as site
- policy. Older server implementations may attempt to preserve
- the internal date on COPY, and may cause a mailbox to be
- ordered in other than strictly ascending internal date/time
- order. Client implementations should not depend on any of
- these behaviors.
-
- Older server implementations may send a TRYCREATE special
- information token inside a separate unsolicited OK response
-
-
-
- Crispin [Page 51]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- instead of inside the NO response.
-
- IMAP2bis server interoperability with old clients
-
- In general, there should be no interoperation problem between a
- server conforming to this specification and a well-written client
- that conforms to an earlier specification. Known problems are
- noted below:
-
- Clients written to use undocumented private server extensions
- that are not in any published specification may work poorly
- with server implementations that do not have those extensions.
-
- Poor wording in the description of the CHECK command in earlier
- specifications implied that a CHECK command is the way to get
- the current number of messages in the mailbox. This is
- incorrect. A CHECK command does not necessarily result in an
- EXISTS response. Clients must remember the most recent EXISTS
- value sent from the server, and should not generate unnecessary
- CHECK commands.
-
- An incompatibility exists with COPY in IMAP2bis. COPY in
- IMAP2bis servers does not automatically create the destination
- mailbox if that mailbox does not already exist. This may cause
- problems with old clients that expect automatic mailbox
- creation in COPY.
-
- The PREAUTH unsolicited response is new in IMAP2bis. It is
- highly unlikely that an old client would ever see this
- response.
-
- The COPY unsolicited response is obsolete. Old clients must
- not depend on receiving this response.
-
- The STORE unsolicited response is obsolete. Old clients must
- not object to receiving a FETCH response instead of this
- response.
-
- The format of dates and times has changed. Old clients should
- accept a four-digit year instead of a two-digit year, and a
- signed four-digit timezone value instead of a timezone name.
- In particular, client implementations must not treat a
- date/time as a fixed format string and assumed that the time
- begins at a particular octet.
-
-
-
-
-
-
-
- Crispin [Page 52]
-
- Internet Draft IMAP2bis September 30, 1993
-
-
- Acknowledgements
-
- Bill Yeager and Rich Acuff contributed invaluable suggestions in the
- evolution of IMAP2 from the original IMAP. James Rice pointed out
- several ambiguities in the previous IMAP2 specification.
-
- My colleagues on the Pine team -- Steve Hubert, Laurence Lundblade,
- David Miller, and Mike Seibel -- worked long and hard to create a
- fantastic email user agent with worldwide popularity. Without their
- efforts, IMAP2 would have languished in obscurity. Terry Gray, our
- boss, provided much-needed moral support and guidance, while refusing
- to let us get away with "good enough" when "great" was possible.
-
- John G. Myers and Chris Newman carefully examined the formal grammar
- and identified numerous mistakes and omissions in the drafts of this
- specification. They also provided invaluable input towards the
- overall architecture of the present protocol, and endured long
- meetings to reach the present protocol.
-
- The present protocol would not have come into existence without the
- assistance of the rest of the IETF IMAP2 working group, in particular
- Ned Freed and Adam Treister.
-
- Any mistakes, flaws, or sins of omission in this IMAP2bis protocol
- specification are, however, strictly my own; and the mention of any
- name above does not imply an endorsement.
-
- Security Considerations
-
- Security issues are discussed in this memo only as far as
- authentication to access a server are concerned.
-
- Author's Address
-
- Mark R. Crispin
- Networks and Distributed Computing, JE-30
- University of Washington
- Seattle, WA 98195
-
- Phone: (206) 543-5762
-
- EMail: MRC@CAC.Washington.EDU
-
-
-
-
-
-
-
-
-
- Crispin [Page 53]
-
-
-